#include <iostream>
#include <vector>

using namespace std;
// 80. 删除有序数组中的重复项II
// 给你一个有序数组 nums ，请你 原地 删除重复出现的元素，使得出现次数超过两次的元素只出现两次 ，返回删除后数组的新长度。
// 不要使用额外的数组空间，你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int numsSize = nums.size();
        if(numsSize == 0 || numsSize == 1 || numsSize == 2)
            return numsSize;

        int k = 2;  // 累计数组中元素的个数
        for(int i = 2; i < numsSize; i++) {
            if(!(nums[k-2] == nums[k-1] && nums[i] == nums[k-1]))
            {
                nums[k] = nums[i];
                k++;
            }
        }
        return k;
    }
};

int main() {
    int arr[] = {1,1,1,2,2,3};
    vector<int> nums(arr, arr+sizeof(arr)/sizeof(int));
    int k = Solution().removeDuplicates(nums);
    for(int i = 0; i < k; i++)
        cout << nums[i] << " ";
    cout << endl;

    return 0;
}
